// Copyright 2019 by 马万里. All rights reserved.
// 开发团队 ：   鸡中之霸
// 开发人员 ：   马万里
// 开发时间 ：   2019-02-19 23:02
// 文件名称 ：   user.go
// 工程名称 ：   beego_project
// 开发工具 ：   GoLand
//

package controllers

import (
	"beego_project/models"
	"beego_project/syserror"
	"errors"
	"strings"
)

type UserController struct {
	BaseController
}

// @router /login [post]
func (this *UserController) Login() {
	// email
	email := this.GetMustString("email", "邮箱不能为空")
	// password
	pwd := this.GetMustString("password", "密码不能为空")

	// 查询用户
	user, err := models.QueryUserByEmailAndPwd(email, pwd)
	if err != nil {
		this.Abort500(syserror.New("登录失败", err))
	}
	this.SetSession(SESSION_USER_KEY, user)
	this.JSONOK("登陆成功", "/")
}

//@router /logout [get]
func (this *UserController) Logout() {
	// 处理登录
	this.MustLogin()
	this.DelSession(SESSION_USER_KEY)
	// 重定向
	this.Redirect("/", 302)
}

// @router /register [post]
func (this *UserController) Register() {
	// 昵称，邮箱，密码，以及确认密码不能为空。
	name := this.GetMustString("name", "昵称不能为空")
	email := this.GetMustString("email", "邮箱不能为空")
	pwd := this.GetMustString("password", "密码不能为空")
	pwd1 := this.GetMustString("password1", "确认密码不能为空")
	if strings.Compare(pwd, pwd1) != 0 {
		this.Abort500(errors.New("两次输入密码不一致！"))
	}
	if u, err := models.QueryUserByName(name); err == nil && u.ID > 0 {
		this.Abort500(errors.New("用户昵称已存在！"))
	}
	if e, err := models.QueryUserByEmail(email); err == nil && e.ID > 0 {
		this.Abort500(errors.New("用户邮箱已存在! "))
	}
	if err := models.SaveUser(&models.User{
		Name:   name,
		Email:  email,
		Pwd:    pwd,
		Avatar: "/static/images/info-img.png",
		Role:   0,
	}); err != nil {
		this.Abort500(syserror.New("用户保存失败", err))
	}
	this.JSONOK("注册成功!", "/user")
}
